56. 合并区间
56. 合并区间
第一版
import (
"slices"
)
func merge(intervals [][]int) [][]int {
// 根据数组的第一个元素进行排序
slices.SortFunc(intervals, func(a, b []int) int {
if a[0] < b[0] {
return -1
} else if a[0] == b[0] {
return 0
} else {
return 1
}
})
// 依次合并每一个元素
ret := [][]int{}
item := intervals[0]
for i:=1;i<len(intervals);i++ {
if item[1] < intervals[i][0] {
ret = append(ret, item)
item = intervals[i]
} else {
item[1] = max(intervals[i][1], item[1])
}
}
ret = append(ret, item)
return ret
}
优化的点
- sortFunc 那里太啰嗦了
- 没必要加一个item,直接用intervals的尾部进行比较即可
import (
"slices"
)
func merge(intervals [][]int) [][]int {
// 根据数组的第一个元素进行排序
slices.SortFunc(intervals, func(a, b []int) int {
return a[0]-b[0]
})
// 递归合并每一个元素
ret := [][]int{intervals[0]}
for i:=1;i<len(intervals);i++ {
if ret[len(ret)-1][1] < intervals[i][0] {
// 无法合并
ret = append(ret, intervals[i])
} else {
// 可以合并
ret[len(ret)-1][1] = max(intervals[i][1], ret[len(ret)-1][1])
}
}
return ret
}
经过优化之后,虽然代码执行用时没有太大的变化,但是更简洁更精炼了,而且减少了一个临时变量的使用
本站总访问量次 本站访客数人次 本文总阅读量次